package com.cgly.medical.service.impl;

import com.cgly.medical.domain.Sta;
import com.cgly.medical.mapper.StaMapper;
import com.cgly.medical.service.CountService;
import com.cgly.medical.service.StaService;
import com.cgly.medical.util.Msg;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class StaServiceImpl implements StaService {

    @Resource
    CountService countService;

    @Resource
    StaMapper staMapper;


    //统计某一天药品订单数，登录人数，就诊人数生成统计数据
    @Override
    public Msg countNum(String day) {


        //调用countSercive得到某一天的药品订单数
        Integer countDrugOrder = countService.countDrugOrder(day);

        //调用countSercive得到某一天的登录人数
        Integer countAccount = countService.countAccount(day);

        //调用countSercive得到某一天的就诊人数
        Integer countPatient = countService.countPatient(day);

        //把获取到的数据添加到数据库，统计分析表里
        Sta sta=new Sta();
        sta.setDrugorderNum(countDrugOrder);
        sta.setLoginNum(countAccount);
        sta.setPatientNum(countPatient);
        sta.setDate_calculated(day);

        //判断数据表中是否存在这一天的数据，存在更新数据，不存在插入数据
        if(staMapper.getStaByDay(day)!=null){
            staMapper.updateSta(sta);
        }else {
            staMapper.insertSta(sta);
        }
        return Msg.success().data("data",sta);
    }


    //图表显示，返回两部分数据，日期json数组，数量json数组
    @Override
    public Map<String, Object> showDate(String type, String begin, String end) {

        //查找符合开始时间和截止时间段的数据
        List<Sta> staList = staMapper.getstaByDate(begin, end);

        //因为返回的有两部分数据：日期和日期所对应的数量
        //前端要求数组json结构，一个日期List,一个数量list
        //创建两个list集合，一个日期list，一个数量List
        List<String> date_calculatedList=new ArrayList<>();
        List<Integer> numDataList=new ArrayList<>();

        //遍历查询所有list集合，进行封装
        for (int i = 0; i < staList.size(); i++) {
            Sta sta = staList.get(i);
            //封装日期list集合
            date_calculatedList.add(sta.getDate_calculated());
            //封装对应的数量部分
            switch (type){
                case "login_num":
                    numDataList.add(sta.getLoginNum());
                    break;
                case "drugorder_num":
                    numDataList.add(sta.getDrugorderNum());
                    break;
                case "patient_num":
                    numDataList.add(sta.getPatientNum());
                    break;
                default:
                    break;
            }

        }

        //把封装之后的两个list集合放到map集合，进行返回
        Map<String,Object> map=new HashMap<>();
        map.put("date_calculatedList",date_calculatedList);
        map.put("numDataList",numDataList);
        return map;
    }
}
